package com.mhy.pickerview;

import android.graphics.Color;
import android.os.Bundle;
import android.util.Log;
import android.view.View;
import android.widget.TextView;

import androidx.appcompat.app.AppCompatActivity;

import com.bigkoo.pickerview.builder.OptionsPickerBuilder;
import com.bigkoo.pickerview.builder.TimePickerBuilder;
import com.bigkoo.pickerview.listener.CustomListener;
import com.bigkoo.pickerview.listener.OnOptionsSelectListener;
import com.bigkoo.pickerview.listener.OnTimeSelectListener;
import com.bigkoo.pickerview.view.OptionsPickerView;
import com.bigkoo.pickerview.view.TimePickerView;

import java.util.ArrayList;
import java.util.Calendar;
import java.util.Date;
import java.util.List;

public class MainActivity extends AppCompatActivity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        findViewById(R.id.btn1).setOnClickListener(v -> {
            initTimePicker();
        });
        findViewById(R.id.btn2).setOnClickListener(v -> {
            initOptionPicker();
        });
        findViewById(R.id.btn3).setOnClickListener(v -> {
            initTimePick("ahhah");
        });
        findViewById(R.id.btn4).setOnClickListener(v -> {
            initTimePick("ahhah");
        });
    }

    //时间选择器
    private TimePickerView timePickerView;
    int year, mon, day;

    private void initTimePicker() {
        //控制时间范围(如果不设置范围，则使用默认时间1900-2100年，此段代码可注释)
        //因为系统Calendar的月份是从0-11的,所以如果是调用Calendar的set方法来设置时间,月份的范围也要是从0-11
        Calendar selectedDate = Calendar.getInstance();

        Calendar startDate = Calendar.getInstance();
        startDate.set(1949, 0, 1);

        Calendar endDate = Calendar.getInstance();
        Calendar cale = null;
        cale = Calendar.getInstance();
        year = cale.get(Calendar.YEAR);
        mon = cale.get(Calendar.MONTH);
        day = cale.get(Calendar.DAY_OF_MONTH);
        endDate.set(year, mon, day);
        //时间选择器
        timePickerView = new TimePickerBuilder(this, new OnTimeSelectListener() {
            @Override
            public void onTimeSelect(Date date, View v) {//选中事件回调
                // 这里回调过来的v,就是show()方法里面所添加的 View 参数，如果show的时候没有添加参数，v则为null
                /*btn_Time.setText(getTime(date));*/
                //确定按钮获得数据data
                Log.e("选择", date.toString());
            }
        }).setLayoutRes(R.layout.pickerview_custom, v -> {
            final TextView tvSubmit = v.findViewById(R.id.tv_finish);
            final TextView ivCancel = v.findViewById(R.id.tv_cancel);
            final TextView tvTilte = v.findViewById(R.id.tv_title);
            tvTilte.setText("生日");
            tvSubmit.setOnClickListener(v1 -> {
                timePickerView.returnData();
                timePickerView.dismiss();
            });
            ivCancel.setOnClickListener(v12 -> timePickerView.dismiss());
        }).setType(new boolean[]{true, true, true, false, false, false})
                .setLabel("", "", "", "", "", "") //设置空字符串以隐藏单位提示   hide label
                .setContentTextSize(14)
                .setDate(selectedDate)
                .setRangDate(startDate, selectedDate)
                .setDividerColor(Color.BLACK)//设置选中项颜色
                .setTextColorCenter(Color.BLACK) //设置选中项文字颜色
                .setLineSpacingMultiplier(2.4f)//设置子项之间的间距
                .isCenterLabel(false) //是否只显示中间选中项的label文字，false则每项item全部都带有label。
                .isDialog(false)
                .setLabel("年", "月", "日", "时", "分", "秒")//默认设置为年月日时分秒
//                .setDecorView(rlFull)//非dialog模式下,设置ViewGroup, pickerView将会添加到这个ViewGroup中
//                .setOutSideColor(0x00000000)//外部颜色 变暗
                .setOutSideCancelable(true)
                .build();

        timePickerView.setKeyBackCancelable(false);//系统返回键监听屏蔽掉
    }

    //条件选择器
    OptionsPickerView pvOptions;
    private List<AreaBean.ProvincesBean> options1Items = new ArrayList<>();
    private ArrayList<ArrayList<String>> options2Items = new ArrayList<>();

    /**
     * @description 注意事项：
     * 自定义布局中，id为 optionspicker 或者 timepicker 的布局以及其子控件必须要有，否则会报空指针。
     * 具体可参考demo 里面的两个自定义layout布局。
     */
    private void initOptionPicker() {//条件选择器初始化，自定义布局
        pvOptions = new OptionsPickerBuilder(this, new OnOptionsSelectListener() {
            @Override
            public void onOptionsSelect(int options1, int options2, int options3, View v) {
                //返回的分别是三个级别的选中位置
                String opt1tx = options1Items.size() > 0 ?
                        //这里实现tv接口get
                        options1Items.get(options1).getPickerViewText() : "";

                String opt2tx = options2Items.size() > 0
                        && options2Items.get(options1).size() > 0 ?
                        options2Items.get(options1).get(options2) : "";

//                String opt3tx = options2Items.size() > 0
//                        && options3Items.get(options1).size() > 0
//                        && options3Items.get(options1).get(options2).size() > 0 ?
//                        options3Items.get(options1).get(options2).get(options3) : "";

//                cityCList=proCList.get(options1).getCityList();
//                cityC2List=proCList.get(options1).getCityList().get(options2).getCityList();
//                String opt1tx = proCList.size() > 0 ? proCList.get(options1).getName() : "";//省
//
//                String opt2tx = cityCList.size() > 0&&proCList.size()> 0 ? cityCList.get(options2).getName() : "";//市
//                String opt3tx = proCList.size() > 0
//                        && cityCList.size() > 0
//                        && cityC2List.size() > 0 ? cityC2List.get(options3).getName() : "";//区
//                String tx = opt1tx + "-" + opt2tx + "-" + opt3tx;
                String tx = opt1tx + " " + opt2tx /*+ " " + opt3tx*/;
                // edt6.setText(tx);
            }
        }).setLayoutRes(R.layout.pickerview_option, new CustomListener() {
            @Override
            public void customLayout(View v) {
                final TextView tvSubmit = v.findViewById(R.id.tv_finish);
                final TextView tvTitle = v.findViewById(R.id.tv_title);
                tvTitle.setText("地区");
                final TextView ivCancel = v.findViewById(R.id.tv_cancel);
                tvSubmit.setOnClickListener(v12 -> {
                    pvOptions.returnData();
                    pvOptions.dismiss();
                });

                ivCancel.setOnClickListener(v1 -> pvOptions.dismiss());

            }
        }).isDialog(false)
                .setOutSideCancelable(true)
                .setLineSpacingMultiplier(2.4f)
                //设置子项之间的间距
                .setDividerColor(Color.BLACK)
                //设置选中项颜色
                .setTextColorCenter(Color.BLACK)
                //设置选中项文字颜色
                .setContentTextSize(14)
                //滚轮文字大小
                .build();

        pvOptions.setPicker(options1Items, options2Items/*, options3Items*/);
//        pvOptions.setPicker(proCList, cityCList, cityC2List);
        //三级选择器
/*pvOptions.setOnDismissListener(new OnDismissListener() {
    @Override
    public void onDismiss(Object o) {

    }
});*/

    }


    public void initTimePick(String tilte) {
        Calendar selectedDate = Calendar.getInstance();
        TimePickerView pvTime;
        Calendar startDate = Calendar.getInstance();
        Calendar endDate = Calendar.getInstance();
        //正确设置方式 原因：注意事项有说明
        startDate.set(year - 11, 0, 1);//mon-1上月
        endDate.set(year, mon, day);//mon本月
        //时间选择器
        pvTime = new TimePickerBuilder(this, new OnTimeSelectListener() {
            @Override
            public void onTimeSelect(Date date, View v) {

//                Map<String,String>map =new HashMap<>();
//                map.put("","");
//                map.put("","");
//                presenter.onGetRequest();
            }
        }).setType(new boolean[]{true, true, true, false, false, false})// 默认全部显示
//                .setTitleSize(20)//标题文字大小
                .setTitleText(tilte)//标题文字
                .setCancelText("cancel")//取消按钮文字
                .setSubmitText("submit")//确定按钮文字
                .setContentTextSize(14)//设置滚轮文字大小
                .setOutSideCancelable(true)//点击屏幕，点在控件外部范围时，是否取消显示
                .isCyclic(false)//是否循环滚动
                .setTitleColor(Color.BLACK)//标题文字颜色
                .setSubmitColor(getResources().getColor(R.color.colorAccent))//确定按钮文字颜色
                .setCancelColor(Color.BLACK)//取消按钮文字颜色
                .setTitleBgColor(getResources().getColor(R.color.colorPrimary))//标题背景颜色 Night mode
                .setBgColor(getResources().getColor(R.color.colorPrimaryDark))//滚轮背景颜色 Night mode
                .setLineSpacingMultiplier(2.4f)//设置子项之间的间距
                .setDate(selectedDate)// 如果不设置的话，默认是系统时间*/
                .setRangDate(startDate, endDate)//起始终止年月日设定
                .setLabel("年", "月", "日", "时", "分", "秒")//默认设置为年月日时分秒
                .isCenterLabel(false) //是否只显示中间选中项的label文字，false则每项item全部都带有label。
                .isDialog(false)//是否显示为对话框样式
                .build();
//        pvTime.setOnDismissListener(new OnDismissListener() {
//            @Override
//            public void onDismiss(Object o) {
//                presenter.onGetRequest(income, expend, month, amount);
//            }
//        });

    }
}
